# Chio Packages Manager

> Система управления пакетами Чио.

Cpm упращает установку, обновление, удаление компонентов Чио.

**Для чего CPM?**

Предположим вы захотели установить себе Чио.
Репозиторий скачать можно только целиком, полным архивом.
Это хорошо, когда вам нужен весмь функционал, но зачастую это не так.
Обычно требуется только ядро, пара плагинов и дополнительные компоненты к ним.
Если вы скачали весь архив, то придётся саому удалять лишние.
Только вот есть шанс удалить нужный компонент, тогда придётся начинать с начала.

Теперь предположим, что вышла новая версия какого-либо компонента. 
Новаая версия... новые функции, исправление старых багов и добавление новых.
Как вы узнаете, что вышла новая версия?
Не думаю, что вы будете время от времен6и заглядывать в репозиторий.
А даже если и будете, ир придётся скачиывать весь архив.

Чтобы упростить весь этот процесс и была создана **CPM**!

```sh
# Краткая шпаргалка для использования cpm.
py cpm locate          # Поиск локальных пакетов и формирование индекса.
py cpm update          # Отдельное обновление данных источников.
py cpm upgrade         # Обновление пакетов.
py cpm install PACKAGE # Установить пакет "package".
py cpm remove PACKAGE  # Удалить пакет "package".
```


## О CPM

Пойдём от простого к сложному.

### Пакет

Это наименьшая еденица cpm.
Пакет содержит в себе необходимые для работы файлы, а также описане `packages.toml`.

Пример:

```toml
[cpm]
name= "Chio Packages Manager"
desc= "Управление пакетами Чио."
ver= "2.0 rf-V5"
build= 30
type= "pm"
```

**В описание пакета входит**:

- `PID`: Package ID
- `name`: Имя пакета
- `desc`: Краткое описание пакета
- `full_desc`: Полное описание пакета
- `ver`: Строковое обозначение версии
- `build`: Номер сборки пакета
- `type`: Тип пакета
- `groups`: К каким группам принадлежит пакет
- `authors`: Авторы пакета
- `requre`: Зависимости пакета

**После попадания в Индекс**:

- `used`: Кому требуется пакет как зависимость
- `files`: Словарь файлов пакета (путь: хеш)
- `path`: Путь к директории пакета
- `url`: Ссылка для загрузки файлов
- `multiple`: Является ли пакет множеством (несколько пакетов в одном `packages.toml`)

**Что можно сделать с пакетом (Package)**:

- Получить параметры пакета
- Проверить установлен ли пакет
- Псомотреть статус пакета
- Посмотреть полные параметры пакета
- Удалить пакет

### Пакетный индекс

Сами по себе пакеты не так полезны.
Список пакетов выстраивается в пакетный индекс.

- Поиск локальных пакетов
- Определение отношений между пакетами
- Поиск проблем с пакетами
- Просмотр статистики об индексе пакетов
- Получение пакето
- Просмотр списка пакетов
- Удаление пакетов (если они не используютсяы)

### Пакетный менеджер

Управляет пакетными индексами.

- Поиск локальных пакетов
- Удаление пакетов
- Просмотр информации о пакетах
- Просмотр статуса пакетов
- Просмотр статистики индекса
- Загрузка обновлений
- Установка пакетов


## О версях.

**Router File Version** (rf-Vx):

В `cpm 2.1` добавлены новые параметры. `cpm 2.0` и `cpm 2.1` совместимы.

- V5 (`cpm 2.0+`): Изменены имена параметров пакета, и наименование файла
- V4 (`cpm 1.6 - 2.0`): Измененён синтаксис PID для описание источников пакета
- V3 (`cpm 1.5 - 1.6`), (`+V2`): Списки файлов заменены на словари: путь - хеш. Это ускоряет обновления
- V2 (`cpm 1.3 - 1.6`): Приведён общий индекс, собираемый **CPM**

### Отличия версий Cpm

Здесь укаазны последние версии каждого этапка.
Для подрбного изучения изменений загляните в `changelog.md`

**cpm-full 2.1** Разделение проакта:

- Более безопасное удаление пакетов
- Исправлена загрузка описания пакета
- Больше подсказок при сборке индекса

**cpm 2.0**: Переработка проекта. 

- Нарушается совместимость со старыми версиями
- Исправлена проблема *фантомных пакетов*
- Работает на `rf-V5`
- Сокращение ненужного функционала
- **Рекомендуется переходить на cpm 2.1**

**cpm 1.5**: Продолжение разработки как отдельный проект.

- Работает на `rf-V3`
- Поддержка нескольких индексов
- **Не поддерживается**

**cpm 1.3**: разрабатывалась вместе с Чио как дополнительная утилита.

- Компактная
- Более стабильная
- Функциональная
- Работает с `rf-V2`, частично `rf-V3`
- **Не поддерживается**


## Настройки cpm

Настройки cpm расположены в `cpm_data/`.

```txt
    ├── package_base.toml    # Параметры пакетов по умолчанию
    ├── repositories         # Загруженные глобильные индексы
    │   ├── chiohub.toml       # Глобальный индекс CHiohub (pentergust/chiohub)
    │   ├── {repo_name}.toml   # Глобальный индекс repo_name (???/repo_name)
    │   ├── ...                # Тут могут быть другие глобальные индексф
    │   └── cpm.toml           # Глобальный индекс для Cpm (pentergust/cpm)
    └── repositories.toml    # Файл определния глобальных индексов
```

### package_base.toml

```toml
name = "package"
desc = "no desc"
full_desc = "no full desc"
ver = "1.0"
build = 1
type = "pm"
groups = []
authors = [ "Milinuri Nirvalen"]
require = []
used = []
path = ""
multiple = false

[files]
```

Если в файле `packages.toml` нету некоторых параметров, они берутся из `package_base`.
Вы можете изменить параметры `package_base` на необходимые вам.

### repositories.toml

```toml
[chiohub]
url = "https://notabug.org/pentergust/ChioHub/raw/master/"
updated = 1665850118

[cpm]
url = "https://notabug.org/pentergust/cpm/raw/master"
updated = 1665850118

```

В файле репозиториев указаны источники для загрузки индексов.
При желании вы можете исключать или наоборот добавлять свои репозитории.

Пример добавления репозитория:

```toml
[name]
url = "ссылка для загрузки файлов"
updated = 0
``` 

или:

```sh
echo "\n[name]\nurl= \"ссылка для загрузки файлов\"\nupdated= 0" >> cpm_data/repositories.toml
```
    
